**********************************************************
*Cloture de la paie
*Programme chaine  partir d'un projet VB
*Vanessa
*
*GESTION DES CONGES (MENSUEL ET BASCULEMENT)
*STEPHANE
**********************************************************

*********************************************************
* RECAPITULATIF DES GOSUB

* 10  -> MAJ DU FICHIER HISTORCUMUL
* 50  -> MAJ DES CONGES PAYES
* 60  -> RECHERCHE DU NOMBRE DE JOURS DE CONGES
* 70  -> MAJ DES COMPTEURS DE CONGES
* 80  -> CALCUL DU TAUX HORAIRE + COEFFICIENT
* 100 -> MAJ DES CONGES EN-COURS D'ACQUISITION
* 200 -> GESTION DES ABSENCES
* 300 -> CALCUL DU NOMBRE DE JOURS D'ABSENCES (HORS MALADIE)
* 301 -> CALCUL DES DROITS AUX CONGES (TYPE 12 OU 13)
* 302 -> CALCUL DU NOMBRE CUMULE DE JOURS D'ABSENCES (JUIN->MAI)
* 303 -> CALCUL DU NOMBRE DE JOURS D'ABSENCES MALADIE
* 310 -> CALCUL DES DROITS AUX CONGES (MALADIE)
* 320 -> CALCUL DES DROITS AUX CONGES <> 01,12,13
* 500 -> GESTION DE BASCULEMENT DES COMPTEURS
* 600 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES PAYES
* 700 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES ANCIENNETE
* 800 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES FRACTIONNEMENT
* 900 -> GESTION DES EFFECTIFS
* 901 -> RECHERCHE SI ETABLISSEMENT DEJA TRAITE
* 910 -> MAJ DU FICHIER ETABLISSEMENT
* 920 -> MAJ DU FICHIER ASSOCIATION

* Ouvertures des fichiers
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en criture
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE PRINT "OUVERTURE DETAILCALCUL" ;* en lecture
OPEN "","HISTORCUMUL" TO F.HISTORCUMUL ELSE PRINT "OUVERTURE HISTORCUMUL" ;* en criture
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE PRINT "OUVERTURE RUBSAISIE" ;* en lecture
OPEN "","RUBCHARGE" TO F.RUBCHARGE ELSE PRINT "OUVERTURE RUBCHARGE" ;* en lecture
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP 
OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE STOP
OPEN "","ETABLISSEMENT" TO F.ETABLISSEMENT ELSE STOP
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP
OPEN "","DETAILADMIN" TO F.DETAILADMIN ELSE STOP
OPEN "","DETAILINTER" TO F.DETAILINTER ELSE STOP
OPEN "","DETAILMANDAT" TO F.DETAILMANDAT ELSE STOP
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE STOP
OPEN "","ANOMALIEPAIE" TO F.ANOMALIEPAIE ELSE STOP
OPEN "","GRILLESCC" TO F.GRILLESCC ELSE STOP
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP
OPEN "","ACTIVITES" TO F.ACTIVITE ELSE STOP
*********************************************************
* Recuperation des arguments
PROCREAD ARGUMENTS ELSE STOP
W_Nom=FIELD(ARGUMENTS," ",1)
W_Len=LEN(W_Nom)
W_RequeteContrat=ARGUMENTS[W_Len+2,999]
*********************************************************
* Requete sur CONTRAT
  W_EFFECTIFPHYSIQUE=""
  W_EFFECTIFTP=""
  W_EFFECTIFPHYSIQUETOTAL=0
  W_EFFECTIFTPTOTAL=0
  W_HORAIRETP=0
  W_ETABLISSEMENT=""
  W_NBETABLISSEMENT=0
  W_HEURESARRET=0

  W_Fini="FAUX"
   EXECUTE W_RequeteContrat

   LOOP
      READNEXT W_CleContrat ELSE W_Fini="VRAI"

      W_CODEAIDANT=W_CleContrat[1,5]
      W_CODECONTRAT=W_CleContrat

   WHILE W_Fini="FAUX" DO
      READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat ELSE PRINT "CONTRAT"
      GOSUB 10 
      ENR_CONTRAT<63>=ENR_CONTRAT<81>
      ENR_CONTRAT<81>=""

      W_PERIODE=ENR_CONTRAT<63>
      W_CODECONTRAT=W_CleContrat
      W_CODECONVENTION=ENR_CONTRAT<1>
      W_DEBUTCONTRAT=ENR_CONTRAT<7>
      W_ASSOCIATION=ENR_CONTRAT<2>

      W_JOURCONGESCP=0
      W_JOURCONGESCA=0
      W_JOURCONGESCPS=0
      W_JOURCONGESCF=0

      GOSUB 50

      GOSUB 80

      READ ENR_ANOMALIEPAIE FROM F.ANOMALIEPAIE,W_CODECONTRAT:W_PERIODE THEN 
           * EFFACE L'ARTICLE ANOMALIEPAIE DU CONTRAT
           DELETE F.ANOMALIEPAIE,W_CODECONTRAT:W_PERIODE
      END

      ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)

      IF ENR_CONTRAT<68>="1" THEN
	   IF ENR_CONTRAT<1>="02" THEN	
     	      READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> THEN
		W_FINMODUL=ENR_ETABLISSEMENT<24>
		IF W_FINMODUL=W_PERIODE[5,2] THEN
		     ENR_CONTRAT<71>=ENR_CONTRAT<76>
		     ENR_CONTRAT<72>=ENR_CONTRAT<77>
		     ENR_CONTRAT<73>=ENR_CONTRAT<78>
		     ENR_CONTRAT<74>=ENR_CONTRAT<79>
		     ENR_CONTRAT<75>=ENR_CONTRAT<80>
		     ENR_CONTRAT<76>=""
		     ENR_CONTRAT<77>=""
		     ENR_CONTRAT<78>=""
		     ENR_CONTRAT<79>=""
		     ENR_CONTRAT<80>=""
		END
	      END
	   END
      END ELSE
	 READ ENR_ASSOCIATION FROM F.ASSOCIATION,ENR_CONTRAT<2> THEN
	   IF ENR_ASSOCIATION<25>="1" THEN
		IF W_PERIODE[5,2]="11" THEN
		     ENR_CONTRAT<71>=ENR_CONTRAT<76>
		     ENR_CONTRAT<72>=ENR_CONTRAT<77>
		     ENR_CONTRAT<73>=ENR_CONTRAT<78>
		     ENR_CONTRAT<74>=ENR_CONTRAT<79>
		     ENR_CONTRAT<75>=ENR_CONTRAT<80>
		     ENR_CONTRAT<76>=""
		     ENR_CONTRAT<77>=""
		     ENR_CONTRAT<78>=""
		     ENR_CONTRAT<79>=""
		     ENR_CONTRAT<80>=""
		END
	   END ELSE
		IF W_PERIODE[5,2]="12" THEN
		     ENR_CONTRAT<71>=ENR_CONTRAT<76>
		     ENR_CONTRAT<72>=ENR_CONTRAT<77>
		     ENR_CONTRAT<73>=ENR_CONTRAT<78>
		     ENR_CONTRAT<74>=ENR_CONTRAT<79>
		     ENR_CONTRAT<75>=ENR_CONTRAT<80>
		     ENR_CONTRAT<76>=""
		     ENR_CONTRAT<77>=""
		     ENR_CONTRAT<78>=""
		     ENR_CONTRAT<79>=""
		     ENR_CONTRAT<80>=""
		END
	   END
         END
      END				     
		
      WRITE ENR_CONTRAT ON F.CONTRAT,W_CleContrat

      GOSUB 100

      GOSUB 500

      IF W_CODECONVENTION<>"02" AND ENR_CONTRAT<13><>"CEC" AND ENR_CONTRAT<13><>"CES" AND ENR_CONTRAT<13><>"CEV" THEN
           GOSUB 900
      END
   REPEAT

   IF W_NBETABLISSEMENT="" OR W_NBETABLISSEMENT=0 THEN
      W_NBETABLISSEMENT=DCOUNT(W_ETABLISSEMENT,CHAR(254))
   END

   * MAJ DES ETABLISSEMENT
   GOSUB 910

   * MAJ DE L'ASSOCIATION
   GOSUB 920

   EXECUTE "EFFACER-LISTE LISTEABSENCESAIDANT"
   EXECUTE "EFFACER-LISTE LISTEMALADIEAIDANT"
STOP

*********************************************************
*********************************************************
* MAJ du fichier HISTORCUMUL

10
  W_CodeAidant=W_CleContrat

  * test si dcallage de paie
  READ ENR_ASSOCIATION FROM F.ASSOCIATION,ENR_CONTRAT<2> ELSE PRINT "ASSOCIATION"
  IF ENR_ASSOCIATION<25> = "1" AND ENR_CONTRAT<1> # "02" AND ENR_CONTRAT<81>[5,2] = "12" THEN
     W_CodeAnnee=ENR_CONTRAT<81>[1,4] + 1
  END ELSE
     W_CodeAnnee=ENR_CONTRAT<81>[1,4]
  END

  IF ENR_CONTRAT<1>="02" THEN
     W_CleHistorCumul=W_CodeAidant[1,5]:W_CodeAnnee:ENR_CONTRAT<3>
  END ELSE 
     W_CleHistorCumul=W_CodeAidant[1,5]:W_CodeAnnee:ENR_CONTRAT<2>
  END

  READ ENR_HISTORCUMUL FROM F.HISTORCUMUL,W_CleHistorCumul ELSE ENR_HISTORCUMUL=""

  IF ENR_HISTORCUMUL<11>="" AND ENR_CONTRAT<7> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<7> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,11;ENR_CONTRAT<7>)
  END
  IF ENR_HISTORCUMUL<12>="" AND ENR_CONTRAT<8> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<8> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,12;ENR_CONTRAT<8>)
  END
  IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<7> # ENR_HISTORCUMUL<11> AND ENR_CONTRAT<7> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<7> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,13;ENR_CONTRAT<7>)
  END
  IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<8> # ENR_HISTORCUMUL<12> AND ENR_CONTRAT<8> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<8> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,14;ENR_CONTRAT<8>)
  END

  READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CleContrat:ENR_CONTRAT<81> ELSE PRINT "DETAILCALCUL"
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,2;ENR_HISTORCUMUL<2>+ENR_DETAILCALCUL<6>)

  IF ENR_DETAILCALCUL<6> >= 60 THEN
     W_Mois=ENR_CONTRAT<81>
     ENR_HISTORCUMUL<3>=W_Mois[5,2]
  END

  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,4;ENR_HISTORCUMUL<4>+ENR_DETAILCALCUL<29>)
  W_CumulBrut=ENR_HISTORCUMUL<5>
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,5;ENR_HISTORCUMUL<5>+ENR_DETAILCALCUL<7>)
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,6;ENR_HISTORCUMUL<6>+ENR_DETAILCALCUL<15>)
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,7;ENR_HISTORCUMUL<7>+ENR_DETAILCALCUL<16>)

  W_Temp=DCOUNT(ENR_DETAILCALCUL<2>,CHAR(253))

  FOR i=1 TO W_Temp
     
     READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<2,i> ELSE PRINT "RUBSAISIE"

     IF ENR_RUBSAISIE<2>="3" OR ENR_RUBSAISIE<2>="4" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,1;ENR_HISTORCUMUL<1>+ENR_DETAILCALCUL<3,i>)
     END

     IF ENR_RUBSAISIE<2>="0" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,8;ENR_HISTORCUMUL<8>+ENR_DETAILCALCUL<5,i>)

        W_Count=DCOUNT(ENR_HISTORCUMUL<9>,CHAR(253))
	IF W_Count < 4 THEN
           W_Passe="FALSE"
           FOR j=1 TO W_Count
               IF ENR_RUBSAISIE<3>=ENR_HISTORCUMUL<9,j> THEN
                   W_Passe="TRUE"
               END 
           NEXT j 
           IF W_Passe="FALSE" THEN
	     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,9,W_Count+1;ENR_RUBSAISIE<3>)
	   END
 	END

     END
  NEXT i

  W_Temp=DCOUNT(ENR_DETAILCALCUL<17>,CHAR(253))

  FOR i=1 TO W_Temp
     READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<17,i> ELSE PRINT "RUBSAISIE"
     IF ENR_RUBSAISIE<2>="2" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,10;ENR_HISTORCUMUL<10>+ENR_DETAILCALCUL<20,i>)
     END
  NEXT i
  
  i=1
  LOOP
  WHILE ENR_DETAILCALCUL<8,i> # "" DO
      j=1
      LOOP
      WHILE ENR_DETAILCALCUL<8,i> # ENR_HISTORCUMUL<15,j> AND ENR_HISTORCUMUL<15,j> # "" DO
	  j=j+1
      REPEAT		
      IF ENR_DETAILCALCUL<8,i>=ENR_HISTORCUMUL<15,j> THEN
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+ENR_DETAILCALCUL<28,i>)
	  IF ENR_DETAILCALCUL<9,i>="" THEN  
 	       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,j;ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<12,i>)
	  END ELSE
	       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,j;ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<9,i>)
	  END
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,18,j;ENR_HISTORCUMUL<18,j>+ENR_DETAILCALCUL<11,i>)
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,19,j;ENR_HISTORCUMUL<19,j>+ENR_DETAILCALCUL<14,i>)
      END ELSE	
          IF ENR_HISTORCUMUL<15,j> = "" THEN

	      W_Count=DCOUNT(ENR_HISTORCUMUL<15>,CHAR(253))
	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,15,W_Count+1;ENR_DETAILCALCUL<8,i>)
	      
	      READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_DETAILCALCUL<8,i> ELSE PRINT "RUBCHARGE"

	      IF ENR_RUBCHARGE<18>="3" THEN
	           ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<28,i>)
	           ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<9,i>)
	      END ELSE
	           ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;ENR_HISTORCUMUL<16,W_Count+1>+ENR_DETAILCALCUL<28,i>)
	           ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_HISTORCUMUL<17,W_Count+1>+ENR_DETAILCALCUL<9,i>)
  	      END

	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,18,W_Count+1;ENR_HISTORCUMUL<18,W_Count+1>+ENR_DETAILCALCUL<11,i>)
  	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,19,W_Count+1;ENR_HISTORCUMUL<19,W_Count+1>+ENR_DETAILCALCUL<14,i>)
	  END
      END		
      i=i+1	
  REPEAT

  IF ENR_HISTORCUMUL<8> = "" THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,8;"0")
  END 

  IF ENR_HISTORCUMUL<10> = "" THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,10;"0")
  END 

  WRITE ENR_HISTORCUMUL ON F.HISTORCUMUL,W_CleHistorCumul
RETURN

*********************************************************
*********************************************************
* MAJ DES CONGES PAYES

50 *

   W_CLEDETAILCALCUL=W_CODECONTRAT:W_PERIODE

   * RECHERCHE DU TYPE DE PERSONNEL (PREST,ADM,MANDAT,INTER)
   IF ENR_CONTRAT<6>="A" THEN
	W_TYPEPERSONNEL=1                                      ;* ADMINISTRATIF
   END ELSE
	IF ENR_CONTRAT<2>="02" THEN
	     W_TYPEPERSONNEL=2                                 ;* MANDATAIRE
	END ELSE
	     * LECTURE ACTIVITE	     
	     READ ENR_ACTIVITE FROM F.ACTIVITE,ENR_CONTRAT<36,1> ELSE
		  * PRINT "ERREUR ACTIVITE"
		  STOP
	     END
	     IF ENR_ACTIVITE<12>="P" THEN
		  W_TYPEPERSONNEL=3                            ;* PRESTATAIRE
	     END ELSE
		  IF ENR_ACTIVITE<12>="M" THEN
		       W_TYPEPERSONNEL=2		       ;* MANDATAIRE
		  END ELSE
		       W_TYPEPERSONNEL=4		       ;* INTERMEDIAIRE
		  END
	     END
	END
   END   

   READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CLEDETAILCALCUL ELSE
	* PRINT "ERREUR DETAILCALCUL"
	STOP
   END

   I=1
   LOOP
	UNTIL ENR_DETAILCALCUL<2,I>="" DO

        * SI RUB. CONGES PAYES OU ANCIENNETE OU POUR SOLDE OU FRACTIONNEMENT
	BEGIN CASE
  	     CASE ENR_DETAILCALCUL<2,I>="802" OR ENR_DETAILCALCUL<2,I>="803" OR ENR_DETAILCALCUL<2,I>="804" OR ENR_DETAILCALCUL<2,I>="817"
		  GOSUB 60
  	     CASE ENR_DETAILCALCUL<33,I>="802" OR ENR_DETAILCALCUL<33,I>="803" OR ENR_DETAILCALCUL<33,I>="804" OR ENR_DETAILCALCUL<33,I>="817"
		  GOSUB 60
	END CASE
        I=I+1
   REPEAT

   * MAJ DES COMPTEURS
   GOSUB 70
RETURN

*********************************************************
*********************************************************
* RECHERCHE DU NOMBRE DE JOURS DE CONGES

60 *

   BEGIN CASE 
	CASE W_TYPEPERSONNEL=1
	     READ ENR_DETAILADMIN FROM F.DETAILADMIN,W_CLEDETAILCALCUL ELSE
		  * PRINT "ERREUR DETAILADMIN"
		  STOP
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILADMIN<1,J>="" DO
		       IF ENR_DETAILADMIN<1,J>="802" THEN
			    W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILADMIN<6,J>
		       END
		       IF ENR_DETAILADMIN<1,J>="803" THEN
			    W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILADMIN<6,J>
		       END
		       IF ENR_DETAILADMIN<1,J>="804" THEN
			    W_JOURCONGESCPS=1
		       END
		       IF ENR_DETAILADMIN<1,J>="817" THEN
			    W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILADMIN<6,J>
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=2
	     READ ENR_DETAILMANDAT FROM F.DETAILMANDAT,W_CLEDETAILCALCUL ELSE
		  * PRINT "ERREUR DETAILMANDAT"
		  STOP
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILMANDAT<1,J>="" DO
		       IF ENR_DETAILMANDAT<1,J>="802" THEN
			    W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILMANDAT<6,J>
		       END
		       IF ENR_DETAILMANDAT<1,J>="803" THEN
			    W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILMANDAT<6,J>
		       END
		       IF ENR_DETAILMANDAT<1,J>="804" THEN
			    W_JOURCONGESCPS=1
		       END
		       IF ENR_DETAILMANDAT<1,J>="817" THEN
			    W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILMANDAT<6,J>
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=3
	     READ ENR_DETAILPREST FROM F.DETAILPREST,W_CLEDETAILCALCUL ELSE
		  * PRINT "ERREUR DETAILPREST"
		  STOP
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILPREST<5,J>="" DO
		       IF ENR_DETAILPREST<5,J>="802" THEN
			    W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILPREST<14,J>
		       END
		       IF ENR_DETAILPREST<5,J>="803" THEN
			    W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILPREST<14,J>
		       END
		       IF ENR_DETAILPREST<5,J>="804" THEN
			    W_JOURCONGESCPS=1
		       END
		       IF ENR_DETAILPREST<5,J>="817" THEN
			    W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILPREST<14,J>
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=4
	     READ ENR_DETAILINTER FROM F.DETAILINTER,W_CODECONTRAT:W_PERIODE ELSE
		  * PRINT "ERREUR DETAILINTER"
		  STOP
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILINTER<8,J>="" DO
		       IF ENR_DETAILINTER<8,J>="802" THEN
			    W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILINTER<14,J>
		       END
		       IF ENR_DETAILINTER<8,J>="803" THEN
			    W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILINTER<14,J>
		       END
		       IF ENR_DETAILINTER<8,J>="804" THEN
			    W_JOURCONGESCPS=1
		       END
		       IF ENR_DETAILINTER<8,J>="817" THEN
			    W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILINTER<14,J>
		       END
		  J=J+1
	     REPEAT

   END CASE
   J=1
RETURN
   
*********************************************************
*********************************************************
* MAJ DES COMPTEURS DE CONGES

70 *
   
   * SI PAS CONGES PAYES POUR SOLDE
   IF W_JOURCONGESCPS=0 THEN
       * CONGES PAYES
       ENR_CONTRAT<39>=ENR_CONTRAT<39>-W_JOURCONGESCP
       * CONGES ANCIENNETE
       ENR_CONTRAT<48>=ENR_CONTRAT<48>-W_JOURCONGESCA
       * CONGES FRACTIONNEMENT
       ENR_CONTRAT<41>=ENR_CONTRAT<41>-W_JOURCONGESCF
   END ELSE
       ENR_CONTRAT<39>=0
       ENR_CONTRAT<41>=0
       ENR_CONTRAT<44>=0
       ENR_CONTRAT<45>=0
       ENR_CONTRAT<46>=0
       ENR_CONTRAT<48>=0
   END

RETURN

*********************************************************
*********************************************************
* CALCUL DU TAUX HORAIRE + COEFFICIENT

80 *

   * CALCULE DERNIER JOUR PERIODE SUIVANTE
   READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE
       * PRINT "ERREUR PERIODESPAIE"
       STOP
   END
   ENR_PERIODESPAIE<2>=ENR_PERIODESPAIE<2>+1
   IF ENR_PERIODESPAIE<2>[5,2]=13 THEN
       ENR_PERIODESPAIE<2>[4,1]=ENR_PERIODESPAIE<2>[4,1]+1
       ENR_PERIODESPAIE<2>=ENR_PERIODESPAIE<2>[1,4]:"01"
   END
  
   W_DERNIERJOURMOISSUIV=ICONV("01/":ENR_PERIODESPAIE<2>[5,2]:"/":ENR_PERIODESPAIE<2>[1,4],"D4/")
   W_DERNIERJOURMOISSUIV=W_DERNIERJOURMOISSUIV-1

   * VERIFIE SI PLUSIEURS AVENANTS DISPONIBLES
   IF ENR_CONTRAT<14,2><>"" THEN
       * RECHERCHE DE L'AVENANT EN COURS
       J=1
       LOOP
	    UNTIL ENR_CONTRAT<15,J+1>>W_DERNIERJOURMOISSUIV OR ENR_CONTRAT<15,J+1>="" DO
	    J=J+1
       REPEAT
   END ELSE
       J=1
   END

   * VERIFIE SI GRILLE DE CLASSIFICATION
   IF ENR_CONTRAT<20,J><>"" THEN
       * LECTURE FICHIER GRILLESCC
       READ ENR_GRILLESCC FROM F.GRILLESCC,ENR_CONTRAT<20,J> ELSE 
	    * PRINT "ERREUR GRILLESCC"
	    STOP
       END

       * CALCUL ANCIENNETE DU CONTRAT
       W_DATEDEPARTGRILLECC=OCONV(ENR_CONTRAT<21,J>+ENR_CONTRAT<70>,"D4/")
       W_DATEDEPARTGRILLECC=W_DATEDEPARTGRILLECC[7,4]:W_DATEDEPARTGRILLECC[4,2]
       W_ANCIENNETE=W_PERIODE-W_DATEDEPARTGRILLECC
       W_ANCIENNETE=INT(W_DATEDEPARTGRILLECC/100)*100

       * RECHERCHE LA VALEUR ATTRIBUEE A L'ANCIENNETE DU CONTRAT
       W_FINGRILLECC="FAUX"
       K=1
       LOOP 
	    IF ENR_GRILLESCC<2,K>="" THEN W_FINGRILLESCC="VRAI"
	    UNTIL W_FINGRILLESCC="VRAI" DO

	    * RECHERCHE DU TAUX HORAIRE
	    IF ENR_GRILLESCC<2,K><=W_ANCIENNETE AND W_ANCIENNETE<ENR_GRILLESCC<3,K> THEN
		 W_TAUXHORCONTRAT=ENR_GRILLESCC<4,K>
		 W_FINGRILLESCC="VRAI"
	    END ELSE
		 K=K+1
	    END
       REPEAT

       IF W_TAUXHORCONTRAT<>0 THEN
	    IF ENR_GRILLESCC<5>="C" THEN

                 * RECHERCHE DATE VALEUR POINT
                 J=1
                 LOOP
	              UNTIL ENR_CONVENTIONCOL<9,J+1>>W_DERNIERJOURMOISSUIV OR ENR_CONVENTIONCOL<9,J+1>="" DO
                      J=J+1
                 REPEAT

	         IF ENR_CONTRAT<22,K><>W_TAUXHORCONTRAT THEN
		      ENR_CONTRAT<22,K>=W_TAUXHORCONTRAT
   	         END
                 ENR_CONTRAT<23,K>=INT(W_TAUXHORCONTRAT*ENR_CONVENTIONCOL<8,J>*10/169+1/2)
	    END ELSE
		 ENR_CONTRAT<23,K>=W_TAUXHORCONTRAT
	    END
       END             
   END
RETURN

*********************************************************
*********************************************************
* GESTION DES CONGES
* MAJ DES CONGES EN-COURS D'ACQUISITION

100 *
    W_REQABSENCESVIDE="FAUX"

    W_MOIS=W_PERIODE[5,2]
    W_ANNEE=W_PERIODE[1,4]

    W_DEBUTPERIODE=ICONV("01/":W_MOIS:"/":W_ANNEE,"D")
    W_MOISFIN=W_PERIODE[5,2]+1
    IF W_MOISFIN>12 THEN
	 W_ANNEEFIN=W_PERIODE[1,4]+1
    END ELSE
	 W_ANNEEFIN=W_PERIODE[1,4]
    END

    W_FINPERIODE=ICONV("01/":W_MOISFIN:"/":W_ANNEEFIN,"D")
    W_FINPERIODE=W_FINPERIODE-1

    EXECUTE 'TSELECT ABSENCESAIDANT AVEC CodAbsAidant = "':W_CODEAIDANT:']" PAR-DECR PeriodeAbsences'
    EXECUTE "SAUVE-LISTE LISTEABSENCESAIDANT"
    EXECUTE "LISTE LISTEABSENCESAIDANT" CAPTURING MSG RETURNING MSGCODE

    IF MSGCODE<1><>209 THEN 
         SELECT F.ABSENCESAIDANT TO LISTEABSENCESAIDANT

         LOOP 
 	     READNEXT CLE FROM LISTEABSENCESAIDANT ELSE
	         W_REQABSENCESVIDE="VRAI"
  	     END
	     UNTIL W_REQABSENCESVIDE="VRAI" DO

	     W_CODEABSENCE=CLE[6,2]
	     W_CLEABSENCE=CLE

	     * LECTURE ABSENCESAIDANT
	     READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CLEABSENCE ELSE
	         * PRINT "ERREUR ABSENCESAIDANT"
	         STOP
	     END

	     * GESTION DES ABSENCES
	     IF ENR_CONTRAT<31><>1 THEN
	         GOSUB 200
	     END
         REPEAT
    END ELSE
	 IF ENR_CONTRAT<31><>1 THEN
	     GOSUB 200
	 END
    END
RETURN   

*********************************************************
*********************************************************
* GESTION DES ABSENCES

200 *

    W_MONTANTARRET=0
    W_ABSENCEMOIS="FAUX"

    * RECHERCHE SI ABSENCES SUR LE MOIS
    IF W_CLEABSENCE[8,5]>=W_DEBUTPERIODE AND W_CLEABSENCE[8,5]<=W_FINPERIODE THEN 
	IF ENR_ABSENCESAIDANT<2>>=W_FINPERIODE OR ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN 
            * PRINT "ABSENCE SUR LE MOIS"
	    W_ABSENCEMOIS="VRAI"
	END
    END
    IF W_CLEABSENCE[8,5]<=W_DEBUTPERIODE THEN 
	IF ENR_ABSENCESAIDANT<2>>=W_FINPERIODE AND ENR_ABSENCESAIDANT<2>>=W_DEBUTPERIODE THEN 
             * PRINT "ABSENCE SUR LE MOIS"
	     W_ABSENCEMOIS="VRAI"
        END    
    END

    IF W_ABSENCEMOIS="VRAI" THEN
         BEGIN CASE
	     * MALADIE
             CASE W_CODEABSENCE="01"     
		  
		  * CALCUL DU NOMBRE DE JOUR AUTORISE PAR CONVENTION
		  GOSUB 300
		  W_NBJOURABSMALADIE=W_NBJOURABS

		  * RECUPERATION ATT 17 DE CONV. COL
		  READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
		       * PRINT "ERREUR CONVENTION"
		       STOP
		  END		

		  IF ENR_CONVENTIONCOL<17><>"" THEN
	   	       W_NBSUSPENSION=ENR_CONVENTIONCOL<17>*100
		  END ELSE
	   	       W_NBSUSPENSION=""
		       GOSUB 310
		  END

		  GOSUB 302

		  W_CUMULJOURMALADIE=W_CUMULMALADIE+W_NBJOURABSMALADIE

		  IF W_CUMULJOURMALADIE<=W_NBSUSPENSION THEN
		       GOSUB 320	
		  END ELSE
		       * CALCUL DU NOMBRE DE JOURS A INDEMNISER
		       W_NBJOURINDEM=W_NBSUSPENSION-W_CUMULJOURMALADIE
		       W_NBJOURNONINDEM=-W_NBJOURINDEM
		       IF W_NBJOURINDEM<0 THEN
		            W_NBJOURINDEM=W_NBJOURINDEM+W_NBJOURABSMALADIE
			
			    W_NBJOURABS=W_NBJOURNONINDEM	
			    GOSUB 301

    		            ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
  		            ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_HEURESABSENCES
		            ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_MONTANTABSENCES

			    ENR_CONTRAT<70>=ENR_CONTRAT<70>+INT(W_NBJOURNONINDEM)
		       END
		       IF W_NBJOURINDEM>0 THEN
		            W_NBJOURABS=W_NBJOURINDEM
		            GOSUB 320
		
		            ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
  		            ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR
		            ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR
		       END

		       ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
		       ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)

		       WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT		
		  END
			
             * CONGES SANS SOLDE OU PARENTAL
	     CASE W_CODEABSENCE="12" OR W_CODEABSENCE="13"    
		
		  GOSUB 300

		  GOSUB 301

                  * LECTURE DU CONTRAT EN COURS
                  READ ENR_CONTRAT FROM F.CONTRAT,W_CODECONTRAT ELSE
	               * PRINT "ERREUR CONTRAT"
 	               STOP
                  END

		  ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
  		  ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_HEURESABSENCES
		  ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_MONTANTABSENCES

	 	  IF W_CODEABSENCE="12" THEN   
                       ENR_CONTRAT<70>=ENR_CONTRAT<70>+INT(W_NBJOURABS)
		  END ELSE
                       ENR_CONTRAT<70>=ENR_CONTRAT<70>+INT(W_NBJOURABS*50/100)
		  END

   	          ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
		  ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)

		  WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT
	  
	     * AUTRES SAUF MALADIE <> 01,12,13
             CASE W_CODEABSENCE<>"01" OR W_CODEABSENCE<>"12" OR W_CODEABSENCE<>"13" 
		  GOSUB 300

		  GOSUB 320
	
		  ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
  		  ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR
		  ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR

		  ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
		  ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)

		  WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT		
        END CASE       
    END ELSE
         IF W_DEBUTCONTRAT<W_DEBUTPERIODE THEN
             W_NBJOURCONGES=250
         END ELSE
             * CALCUL AU PRORATA DES JOURS DE CONGES
             W_NBJOURPRESENT=W_DEBUTCONTRAT-W_DEBUTPERIODE
    	     W_NBJOURPRESENT=3000-W_NBJOURPRESENT
             W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
             W_NBJOURCONGES=W_NBJOURCONGES+1/2
             W_NBJOURCONGES=INT(W_NBJOURCONGES)
	 END

         * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
  	 READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	     * PRINT "ERREUR DETAILCALCUL"
             STOP
         END

         W_VALEURHEURESJOUR=ENR_DETAILCALCUL<6>*10/100
         W_VALEURMONTJOUR=ENR_DETAILCALCUL<7>*10/100

         ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
  	 ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR
	 ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR

         ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
         ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)

         WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT		
    END

RETURN	 


*********************************************************
*********************************************************
* CALCUL DU NOMBRE DE JOURS D'ABSENCES (HORS MALADIE)

300 * 

    * DEBUT ABS >= DEBUT MOIS
    IF CLE[8,5]>=W_DEBUTPERIODE THEN
    * FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN
  	    W_NBJOURABS=ENR_ABSENCESAIDANT<2>-CLE[8,5]
	END ELSE
  	    W_NBJOURABS=W_FINPERIODE-CLE[8,5]
	END
    END ELSE
	* FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN
  	    W_NBJOURABS=ENR_ABSENCESAIDANT<2>-W_DEBUTPERIODE
	END ELSE
  	    W_NBJOURABS=W_FINPERIODE-W_DEBUTPERIODE
	END
    END
    W_NBJOURABS=W_NBJOURABS*100

    * CALCUL DU NOMBRE DE JOURS SI DEMI-JOURNEE
    IF ENR_ABSENCESAIDANT<1>=1 THEN
	IF ENR_ABSENCESAIDANT<3>=1 THEN
	    W_NBJOURABS=W_NBJOURABS+50
	END ELSE
	    W_NBJOURABS=W_NBJOURABS+100
	END
    END ELSE
	IF ENR_ABSENCESAIDANT<3>=1 THEN
	    W_NBJOURABS=W_NBJOURABS+100
	END ELSE
	    W_NBJOURABS=W_NBJOURABS+50
        END
    END	

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES (TYPE 12 OU 13)

301 *
 
   * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURPRESENT=3000-W_NBJOURABS
    W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
    W_NBJOURCONGES=W_NBJOURCONGES+1/2
    W_NBJOURCONGES=INT(W_NBJOURCONGES)
	      			
    * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
	READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	* PRINT "ERREUR DETAILCALCUL"
	STOP
    END

    W_HEURESABSENCES=ENR_DETAILCALCUL<6>*10/100
    W_MONTANTABSENCES=ENR_DETAILCALCUL<7>*10/100

RETURN

*********************************************************
*********************************************************
* CALCUL DU NOMBRE CUMULE DE JOURS D'ABSENCES (JUIN->MAI)

302 *
    W_CUMULMALADIE=0
    W_REQMALADIEVIDE="FAUX"

    W_DEBUTANNEE=ICONV("01/06/":W_PERIODE[1,4],"D4/")
    W_PERIODECOURS=ICONV("01/":W_PERIODE[5,2]:"/":W_PERIODE[1,4],"D4/")-1    

    EXECUTE 'TSELECT ABSENCESAIDANT AVEC CodAbsAidant = "':W_CODEAIDANT:']" AND AVEC NumMotifAidant = "01" AND AVEC FinAbsAidant >= "':W_DEBUTANNEE:'" OR = "" AND AVEC DebAbsAidant <= "':W_PERIODECOURS:'" PAR DebAbsAidant'
    EXECUTE "SAUVE-LISTE LISTEMALADIEAIDANT"
    EXECUTE "LISTE LISTEMALADIEAIDANT" CAPTURING MSG RETURNING MSGCODE

    IF MSGCODE<1>=209 THEN W_REQMALADIEVIDE="VRAI"

    IF W_REQMALADIEVIDE="FAUX" THEN
         SELECT F.ABSENCESAIDANT TO LISTEABSENCESAIDANT

         LOOP 
	      READNEXT CLE FROM LISTEMALADIEAIDANT ELSE
	          W_REQMALADIEVIDE="VRAI"
     	      END
	      UNTIL W_REQMALADIEVIDE="VRAI" DO

	      GOSUB 303

    	      * CUMUL DU NOMBRE DE JOURS DE MALADIE SUR L'ANNEE
	      W_CUMULMALADIE=W_CUMULMALADIE+W_NBJOURABSCUMUL              
	 REPEAT
    END ELSE 
	 W_CUMULMALADIE=0
    END

RETURN

*********************************************************
*********************************************************
* CALCUL DU NOMBRE DE JOURS D'ABSENCES MALADIE

303 * 

    * DEBUT ABS <= 01/06
    IF CLE[8,5]<=W_DEBUTANNEE THEN
        * FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_PERIODECOURS THEN
            W_NBJOURABSCUMUL=ENR_ABSENCESAIDANT<2>-W_DEBUTANNEE
	END ELSE
            W_NBJOURABSCUMUL=W_PERIODECOURS-W_DEBUTANNEE
	END
    END ELSE
	* FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN
  	    W_NBJOURABSCUMUL=ENR_ABSENCESAIDANT<2>-CLE[1,8]
	END ELSE
  	    W_NBJOURABSCUMUL=W_PERIODECOURS-CLE[1,8]
	END
    END
    W_NBJOURABSCUMUL=W_NBJOURABSCUMUL*100

    * CALCUL DU NOMBRE DE JOURS SI DEMI-JOURNEE
    IF ENR_ABSENCESAIDANT<1>=1 THEN
	IF ENR_ABSENCESAIDANT<3>=1 THEN
	    W_NBJOURABSCUMUL=W_NBJOURABSCUMUL+50
	END ELSE
	    W_NBJOURABSCUMUL=W_NBJOURABSCUMUL+100
	END
    END ELSE
	IF ENR_ABSENCESAIDANT<3>=1 THEN
	    W_NBJOURABSCUMUL=W_NBJOURABSCUMUL+100
	END ELSE
	    W_NBJOURABSCUMUL=W_NBJOURABSCUMUL+50
        END
    END	

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES (MALADIE)

310 *
 
   * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURPRESENT=3000-W_NBJOURABSMALADIE
    W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
    W_NBJOURCONGES=W_NBJOURCONGES+1/2
    W_NBJOURCONGES=INT(W_NBJOURCONGES)
	      			
    * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
	READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	* PRINT "ERREUR DETAILCALCUL"
	STOP
    END

    W_HEURESABSENCES=ENR_DETAILCALCUL<6>*10/100
    W_MONTANTABSENCES=ENR_DETAILCALCUL<7>*10/100

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES <> 01,12,13

320 *

    IF W_DEBUTCONTRAT<W_DEBUTPERIODE THEN
         W_NBJOURCONGES=250
    END ELSE
         * CALCUL AU PRORATA DES JOURS DE CONGES
         W_NBJOURPRESENT=W_DEBUTCONTRAT-W_DEBUTPERIODE
	 W_NBJOURPRESENT=3000-W_NBJOURPRESENT
         W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
         W_NBJOURCONGES=W_NBJOURCONGES+1/2
         W_NBJOURCONGES=INT(W_NBJOURCONGES)   
    END

    * LECTURE DETAILCALCUL
    READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	 * PRINT "ERREUR DETAILCALCUL"
	 STOP
    END

    * RECHERCHE DES RUBRIQUES 807 - 808
    J=1
    LOOP 
	 UNTIL ENR_DETAILCALCUL<2,J>="" DO
			
	 * SI RUB 807 - 808, CALCULE LE MONTANT DE L'ARRET
	 IF ENR_DETAILCALCUL<3,J>="807" OR ENR_DETAILCALCUL<3,J>="808" THEN
 	      W_MONTANTARRET=W_MONTANTARRET+ENR_DETAILCALCUL<5,J>
         END

	 J=J+1
    REPEAT		  

    * SI W_MONTANTARRET <> 0 
    IF W_MONTANTARRET<>0 THEN
	 W_BRUTARRET=ENR_DETAILCALCUL<7>-W_MONTANTARRET
	 W_HEURESARRET=ENR_DETAILCALCUL<6>
    END

    W_SORTIE="FAUX"

    J=1
    LOOP 
	 UNTIL ENR_ABSENCESAIDANT<17,J>="" OR W_SORTIE="VRAI" DO
	 W_NBCONTRAT=DCOUNT(ENR_ABSENCESAIDANT<17,J>,CHAR(252))
	 FOR K=1 TO W_NBCONTRAT
	     * RECHERCHE SI CONTRAT EXISTE
	     IF ENR_ABSENCESAIDANT<17,J,K>=W_CODECONTRAT THEN
		 W_SORTIE="VRAI"
		 W_RANGMV=J
		 W_RANGMS=K
		 EXIT
   	     END
	 NEXT	
    REPEAT

    * VALEUR HEURES + MONTANT RAMENE AU JOUR
    W_VALEURHEURESJOUR=INT(ENR_ABSENCESAIDANT<15,J>/30+1/2)
    W_VALEURMONTJOUR=INT(ENR_ABSENCESAIDANT<14,J>/30+1/2)

    * CALCUL BASE HEURES CONGES + MONTANT
    W_VALEURHEURESJOUR=INT((W_VALEURHEURESJOUR*W_NBJOURABS)/100+1/2)
    W_VALEURMONTJOUR=INT((W_VALEURMONTJOUR*W_NBJOURABS)/100+1/2)

    * PRISE DES 10%
    W_VALEURHEURESJOUR=INT((W_VALEURHEURESJOUR*10/100)+(W_HEURESARRET*10/100)+1/2)
    W_VALEURMONTJOUR=INT((W_VALEURMONTJOUR*10/100)+(W_MONTANTARRET*10/100)+1/2)  

    * LECTURE DU CONTRAT EN COURS
    READ ENR_CONTRAT FROM F.CONTRAT,W_CODECONTRAT ELSE
         * PRINT "ERREUR CONTRAT"
         STOP
    END

RETURN


*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS

500 *

    * TEST DE LA PERIODE EN COURS

    * BASCULEMENT COMPTEUR
    READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
	 * PRINT "ERREUR CONVCOL"
   	 STOP
    END

    * LECTURE CONTRAT EN COURS
    READ ENR_CONTRAT FROM F.CONTRAT,W_CODECONTRAT ELSE
         * PRINT "ERREUR CONTRAT"
         STOP
    END

    W_DATEDEBUTCONTRAT=OCONV(W_DEBUTCONTRAT,"D4/")
    W_DATEDEBUTCONTRAT=W_DATEDEBUTCONTRAT[7,4]:W_DATEDEBUTCONTRAT[4,2]

    IF W_PERIODE[5,2]="05" THEN    

         * GESTION DU BASCULEMENT DES CONGES 
	 GOSUB 600

	 * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE EN MAI
	 IF ENR_CONVENTIONCOL<13>=1 THEN
	      GOSUB 700
	 END
    END

    * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE MOIS ANNIVERSAIRE
    IF ENR_CONVENTIONCOL<13>=2 THEN
	 IF W_DATEDEBUTCONTRAT[5,2]=W_PERIODE[5,2] THEN
	      GOSUB 700
	 END	
    END         

    IF W_PERIODE[5,2]="10" THEN

	 * GESTION DES CONGES DE FRACTIONNEMENT
	 GOSUB 800
 
    END

    WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT    

RETURN
	
*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES PAYES

600 *

    W_NBJOURCONGESTOTAL=ENR_CONTRAT<44>
    * ARRONDI LE NBRE DE JOURS CONGES A L'ENTIER SUPERIEUR    
    IF W_NBJOURCONGESTOTAL<>0 THEN
	 W_NBJOURCONGESTOTAL=INT((ENR_CONTRAT<44>/100)+1)
    END
    W_NBJOURCONGESTOTAL=W_NBJOURCONGESTOTAL*100

    * CALCULE LA VALEUR D'UNE JOURNEE EN HRES + MONTANT
    W_VALEURTOTALHEURES=ENR_CONTRAT<45>/W_NBJOURCONGESTOTAL
    W_VALEURTOTALMONTANT=ENR_CONTRAT<46>/W_NBJOURCONGESTOTAL

    W_VALEURTOTALHEURES=INT(W_VALEURTOTALHEURES*100)
    W_VALEURTOTALMONTANT=INT(W_VALEURTOTALMONTANT*100)

    * TEST SI DERNIERE DECIMALES PAIRES DE TOTAL HEURES
    IF W_VALEURTOTALHEURES/2-INT(W_VALEURTOTALHEURES/2)<>0 THEN
	 W_VALEURTOTALHEURES=W_VALEURTOTALHEURES+1
    END
    * TEST SI DERNIERE DECIMALES PAIRES DE TOTAL MONTANT
    IF W_VALEURTOTALMONTANT/2-INT(W_VALEURTOTALMONTANT/2)<>0 THEN
	 W_VALEURTOTALHEURES=W_VALEURTOTALHEURES+1
    END

    * AFFECTATION VALEUR D'UNE JOURNEE
    ENR_CONTRAT<42>=W_VALEURTOTALHEURES
    ENR_CONTRAT<43>=W_VALEURTOTALMONTANT

    * CONVERSION OUVRABLES / OUVRES SI CONV. COL. LE PERMET
    IF ENR_CONVENTIONCOL<2>=1 THEN
	 ENR_CONTRAT<44>=ENR_CONTRAT<44>*5/6
    END

    * REPRISE DES NON CONSOMMES SI CONV. COL. LE PERMET
    IF ENR_CONVENTIONCOL<3>=2 THEN
	 ENR_CONTRAT<38>=ENR_CONTRAT<44>+ENR_CONTRAT<38>
    END ELSE 
	 ENR_CONTRAT<38>=ENR_CONTRAT<44>
    END
    ENR_CONTRAT<38>=INT((ENR_CONTRAT<38>+99)/100)

    * CONGES RESTANTS A CONSOMMER
    ENR_CONTRAT<39>=(ENR_CONTRAT<38>*100)-ENR_CONTRAT<83>

    * VIDAGE CONTRAT
    ENR_CONTRAT<44>=0
    ENR_CONTRAT<45>=0
    ENR_CONTRAT<46>=0
    ENR_CONTRAT<83>=0

RETURN

*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES ANCIENNETE

700 *

    * CALCUL DE L'ANCIENNETE DU CONTRAT
    W_DATECLOTURE=W_PERIODE+1
    * SI DATE CLOTURE > DECEMBRE
    IF W_DATECLOTURE[5,2]=13 THEN
	 W_DATECLOTURE=W_DATECLOTURE[1,4]+1:"01"
    END

    W_ANCIENNETE=INT(W_DATECLOTURE-W_DATEDEBUTCONTRAT)/100
    
    BEGIN CASE

         * EMPLOYES DE MAISON OU AIDE A DOMICLIE
	 CASE W_CODECONVENTION="02" OR W_CODECONVENTION="01"		
              W_NBJOURANCIEN=INT(W_ANCIENNETE/5)
              IF W_NBJOURANCIEN>4 THEN	
		   W_NBJOURANCIEN=4
	      END

         * FAMILLES RURALES
	 CASE W_CODECONVENTION="04"		
              W_NBJOURANCIEN=INT(W_ANCIENNETE/4)
              IF W_NBJOURANCIEN>5 THEN	
		   W_NBJOURANCIEN=5
	      END

         * TRAVAILLEUSES FAMILLIALES
	 CASE W_CODECONVENTION="06"		
              W_NBJOURANCIEN=INT(W_ANCIENNETE/5)*2
              IF W_NBJOURANCIEN>6 THEN	
		   W_NBJOURANCIEN=6
	      END

         * ADMR DU 6 MAI 1970
	 CASE W_CODECONVENTION="03"		
	      IF W_ANCIENNETE>=5 AND W_ANCIENNETE<=10 THEN
	           W_NBJOURANCIEN=2
	      END ELSE
		   IF W_ANCIENNETE>10 THEN
  		        W_NBJOURANCIEN=5
	           END
              END

    END CASE

    ENR_CONTRAT<47>=W_NBJOURANCIEN

RETURN

*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES FRACTIONNEMENT

800 *

    W_NBJOURFRACT=0

    * CALCUL DU NOMBRE DE JOURS DE CONGES RESTANTS
    IF ENR_CONVENTIONCOL<2>=1 THEN
         W_NBJOURCONGESRESTANT=ENR_CONTRAT<39>*6/5        
    END ELSE
         W_NBJOURCONGESRESTANT=ENR_CONTRAT<39>
    END

    W_NBJOURCONGESRESTANT=W_NBJOURCONGESRESTANT/100

    BEGIN CASE

 	 * TOUTES SAUF AIDE A DOMICILE
	 CASE W_CODECONVENTION<>"01"
              IF W_NBJOURCONGESRESTANT>=12 THEN
		   W_NBJOURFRACT=2
	      END ELSE
		   IF W_NBJOURCONGESRESTANT>=9 THEN
			W_NBJOURFRACT=1
		   END
	      END

	 * AIDE A DOMICILE
	 CASE W_CODECONVENTION="01"
              IF W_NBJOURCONGESRESTANT>=12 THEN
		   W_NBJOURFRACT=3
	      END ELSE
		   IF W_NBJOURCONGESRESTANT>=9 THEN
			W_NBJOURFRACT=1
		   END
	      END

    END CASE

    ENR_CONTRAT<40>=W_NBJOURFRACT
    ENR_CONTRAT<41>=W_NBJOURFRACT*100

RETURN

*********************************************************
*********************************************************
* GESTION DES EFFECTIFS

900 *

    GOSUB 901

    W_EFFECTIFPHYSIQUE<I>=W_EFFECTIFPHYSIQUE<I>+100

    READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> ELSE
	 * PRINT "ERREUR ETABLISSEMENT"
	 STOP
    END

    * RECUPERE L'HORAIRE HEBDO LEGAL MENSUEL
    W_HORAIREHEBDO=ENR_ETABLISSEMENT<16>*52/12

    * LECTURE DETAILCALCUL POUR RECUPERER LES HEURES EFFECTUEES SUR LE MOIS
    READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	 * PRINT "ERREUR DETAILCALCUL"
	 STOP
    END

    W_HEURESPAYEES=ENR_DETAILCALCUL<6>

    IF W_HEURESPAYEES>=(W_HORAIREHEBDO*4/5) THEN 
	 W_EFFECTIFTP<I>=W_EFFECTIFTP<I>+100
    END ELSE
	 W_HORAIRETP=W_HORAIRETP+W_HEURESPAYEES
    END

    W_EFFECTIFTP<I>=W_EFFECTIFTP<I>+INT((W_HORAIRETP<I>/W_HORAIREHEBDO)*100+1/2)

RETURN

*********************************************************
*********************************************************
* RECHERCHE SI ETABLISSEMENT DEJA TRAITE

901 * 


    I=1
    LOOP 
	 UNTIL W_ETABLISSEMENT<I>=ENR_CONTRAT<3> OR W_ETABLISSEMENT<I>="" DO
         I=I+1
    REPEAT

    IF W_ETABLISSEMENT<I>="" THEN
	 W_ETABLISSEMENT<I>=ENR_CONTRAT<3>
         W_NBETABLISSEMENT=I
    END

RETURN

*********************************************************
*********************************************************
* MAJ DU FICHIER ETABLISSEMENT

910 *

    FOR I=1 TO W_NBETABLISSEMENT    

	 * LECTURE ETABLISSEMENT
	 READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,W_ETABLISSEMENT<I> ELSE
	      * PRINT "ERREUR ETABLISSEMENT"
	      STOP
	 END

	 IF ENR_ETABLISSEMENT<19,1><>W_PERIODE THEN
 	      ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,17,1;W_EFFECTIFPHYSIQUE)
	      ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,18,1;W_EFFECTIFTP)
	      ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,19,1;W_PERIODE)
	 END ELSE
 	      ENR_ETABLISSEMENT<17,1>=ENR_ETABLISSEMENT<17,1>+W_EFFECTIFPHYSIQUE
 	      ENR_ETABLISSEMENT<18,1>=ENR_ETABLISSEMENT<18,1>+W_EFFECTIFTP
	 END

 	 W_EFFECTIFPHYSIQUETOTAL=W_EFFECTIFPHYSIQUETOTAL+W_EFFECTIFPHYSIQUE
	 W_EFFECTIFTPTOTAL=W_EFFECTIFTPTOTAL+W_EFFECTIFTP

	 WRITE ENR_ETABLISSEMENT ON F.ETABLISSEMENT,W_ETABLISSEMENT<I>

    NEXT I

RETURN

*********************************************************
*********************************************************
* MAJ DU FICHIER ASSOCIATION

920 *

    * LECTURE ASSOCIATION
    READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_ASSOCIATION ELSE
	 * PRINT "ERREUR ASSOCIATION"
	 STOP
    END

    IF ENR_ASSOCIATION<29,1><>W_PERIODE THEN
 	 ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,27,1;W_EFFECTIFPHYSIQUETOTAL)
	 ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,28,1;W_EFFECTIFTPTOTAL)
	 ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,29,1;W_PERIODE)
    END ELSE
 	 ENR_ASSOCIATION<27,1>=ENR_ASSOCIATION<27,1>+W_EFFECTIFPHYSIQUETOTAL
 	 ENR_ASSOCIATION<28,1>=ENR_ASSOCIATION<28,1>+W_EFFECTIFTPTOTAL
    END

    WRITE ENR_ASSOCIATION ON F.ASSOCIATION,W_ASSOCIATION

RETURN
